﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Behavioral
{
    public interface IExceptionExpected
    {
        void ThenThrow<TException>()
            where TException : Exception;

        void ThenThrow(Type exceptionType);
    }

    public interface IExpectationFluent<TTarget> : IExceptionExpected
    {
        IFurtherExpectationFluent<TTarget> Then<TAssertion>(params object[] constructorParameters)
            where TAssertion : IAssertion<TTarget>;
    }

    public interface IExpectationFluent<TTarget, TReturnType> : IExceptionExpected
    {
        IFurtherExpectationFluent<TTarget, TReturnType> Then<TAssertion>(params object[] constructorParameters)
            where TAssertion : IAssertion<TTarget, TReturnType>;
    }

    public interface IFurtherExpectationFluent<TTarget>
    {
        IFurtherExpectationFluent<TTarget> And<TAssertion>(params object[] constructorParameters)
            where TAssertion : IAssertion<TTarget>;
    }

    public interface IFurtherExpectationFluent<TTarget, TReturnType>
    {
        IFurtherExpectationFluent<TTarget, TReturnType> And<TAssertion>(params object[] constructorParameters)
            where TAssertion : IAssertion<TTarget, TReturnType>;
    }
}
